<?php
class pBaseAction extends Action {

    protected $resutOperates;

    protected  function _initialize() {
        if(false===array_key_exists(C('USER_AUTH_KEY'), $_SESSION)) {
            $this->redirect('login','Public');
            return;
        }
        parent::_initialize();
    }

    /**
     * 获取可用结果页面上的操作链接
     *
     * 传入参数如array('index',array('新的显示名称','add'))，默认根据resutOperates的设定取值，如是数组形式
     * 则根据数组中定义的设定
     *
     * @param array $ops 预期要提供的操作
     * @param boolean $back 指定是否要显示返回按钮
     */
    public function getOperates($ops,$back=false){
        $operates=array();
        if(true===$back){
            $operates[]=array('返回','back');
        }
        //获取用户的权限
        $accessNodeList=$_SESSION['_ACCESS_LIST'][strtoupper(APP_NAME)][strtoupper(MODULE_NAME)];
        if( ! $accessNodeList ) return $operates;
        $ro=array_change_key_case($this->resutOperates,CASE_UPPER);
        foreach($ops as $key=>$val){
            if(is_array($val)){
                if(array_key_exists(strtoupper($val[1]),$accessNodeList)){
                    $operates[]=$val;
                }
            }else{
                $val=strtoupper($val);
                if(array_key_exists($val,$accessNodeList) && in_array($val,$ro)){
                    $operates[]=$ro[$val];
                }
            }
        }
        return $operates;
    }

    /**
     * 新建/添加操作
     */
     public function add(){
         $this->display();
     }

    /**
     * 搜索页面
     */
     public function search(){
         //TODO 需要加上权限判断，有index权限即有搜索权限
         $this->display();
     }

    /**
     * 操作结果反馈页面
     *
     * @param <type> $msg 主提示信息，格式为"动词+名词+操作状态"
     * @param <type> $info　副提示信息
     * @param <array> $operate　操作定义，"操作名称"=>"操作链接"
     * @param <type> $type 反馈类型
     */
    protected function fail($msg,$info='',$operates='',$type='fail') {
        if(!$operates) {
            $operates[]=array('返回','back');
        }
        $this->assign('msg', $msg);
        $this->assign('urls', $operates);
        $this->assign('info', $info);
        $this->assign('type', $type);
        parent::display('Admin@Public:result');
    }
    protected function ok($msg,$info='',$operate=''){
        return $this->fail($msg, $info, $operate,'success');
    }

    /**
     为保证参数一致性，使用charset参数传递模块名（ModuleName，如pRoleAction对应模块名pRole）
     */
    public function display($templateFile=ACTION_NAME,$charset=MODULE_NAME,$contentType='text/html',$varPrefix=''){
        $this->assign('QPath','<script type="text/javascript">var _APP_="'.__APP__.'";
        if(window==window.top){ document.cookie="goLink="+location+";path="+_APP_; location.replace("'.__APP__.'/pAdmin/index");}</script>');
        parent::display('Admin@'.$charset.':'.$templateFile);
    }
}
